package cuiweiyou.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/* 
 * @RequestMapping("1st_path") 示 http://localhost:8080/SpringmvcDemo/1st_path
 * @RequestMapping注解在类上，映射为host后的第一级url path
 * @RequestMapping注解在方法上，所属类没有被注解时，映射为host后的第1级url path 示 http://localhost:8080/SpringmvcDemo/hello
 * @RequestMapping注解在方法上，所属类被注解时，映射第2级url path 示 http://localhost:8080/SpringmvcDemo/1st_path/hello
 */
@Controller // 接口控制器
public class HelloController {

	// 转发到 /WEB-INF/views/success.jsp 页面
	@RequestMapping("/hello") // 可以指定多级，/hello/world
	public String hello(){
		System.out.println("hello springmvc");
		return "success";
	}
	
	// 响应rest get 请求。同hello接口
	@RequestMapping("/rest/get")
	public String restGET(){
		System.out.println("rest get");
		return "success";
	}
	
	// 响应rest post请求
	@RequestMapping(
			value="/rest/{id}",
			method=RequestMethod.POST)
	public String restPOST(@PathVariable("id")int id){
		System.out.println("rest post " + id);
		return "success";
	}
	
	// 响应rest put请求
	@RequestMapping(
			value="/rest/{id}",
			method=RequestMethod.PUT)
	public String restPUT(@PathVariable("id")int id){
		System.out.println("rest put " + id);
		return "success";
	}
	
	// 响应rest put请求
	@RequestMapping(
			value="/rest/{id}",
			method=RequestMethod.DELETE)
	public String restDELETE(@PathVariable("id")int id){
		System.out.println("rest delete " + id);
		return "success";
	}
	
	// 响应rest风格的请求（spring3.0始）
	@RequestMapping("/rest/{name}") // 将请求路径的最后一级path作为一个变量-占位符name的值存储
	public String rest(@PathVariable("name")String name){ // 通过@PathVariable注解，映射到此方法的实体参数name上
		System.out.println("rest springmvc ：" + name);
		return "success";
	}
	
	// 响应ant格式的get请求
	// 一个?即表示单字符长度名称的path 示 http://localhost:8080/SpringmvcDemo/a/ant
	// 一个*即表示多字符名称的path 示 http://localhost:8080/SpringmvcDemo/abcedfghijk/ant
	// 2个星，**即表示 多级path 示 http://localhost:8080/SpringmvcDemo/path1/path2/pathn/ant
	@RequestMapping("/*/ant")
	public String ant(){
		System.out.println("ant springmvc");
		return "success";
	}
	
	// 限制get请求的参数（不常用）
	@RequestMapping(
			value="/verify", // 接口
			// get请求除了给出params要求的参数外还可以给出更错参数，只是没有用处
			params={"name", "age"} // 必须有参数name和age，不限制参数的值 
//			params={"name", "!age"} // 必须有参数name，不限制参数的值。禁止有参数age 
//			params={"name", "age!=14"} // 必须有参数name和age，并且age不能是14 
//			params={"name=fengjie", "age=14"} // 必须有参数name和age，并且name必须是fengjie、age必须是14 
//			params={"name!=fengjie", "age!=14"} // 必须有参数name和age，并且name不能是fengjie、age不能是14 
//			params={"!name", "!age"} // 禁止有参数name和age
			// 错误的参数会导致404
			)
	public String verify(){
		System.out.println("verify springmvc");
		return "success";
	}
	
	// 指定一个响应post请求的接口
	@RequestMapping(
			value="/post", // 接口名
			method=RequestMethod.POST) // 在页面上form可以发起post请求
	public String post(){
		System.out.println("post springmvc");
		return "success";
	}
}
